/*
* The syntax highlight.
*/

@import "colors/light-syntax";
@import "colors/dark-syntax";

html {
  @media (prefers-color-scheme: light) {
    &:not([data-mode]),
    &[data-mode="light"] {
      @include light-syntax;
    }

    &[data-mode="dark"] {
      @include dark-syntax;
    }
  }

  @media (prefers-color-scheme: dark) {
    &:not([data-mode]),
    &[data-mode="dark"] {
      @include dark-syntax;
    }

    &[data-mode="light"] {
      @include light-syntax;
    }
  }
}

/* -- Codes Snippet -- */

$code-radius: 6px;

%code-snippet-bg {
  background: var(--highlight-bg-color);
}

%code-snippet-radius {
  border-radius: $code-radius;
}

%code-snippet-padding {
  padding-left: 1rem;
  padding-right: 1.5rem;
}

.highlighter-rouge {
  @extend %code-snippet-bg;
  @extend %code-snippet-radius;

  color: var(--highlighter-rouge-color);
  margin-top: 0.5rem;
  margin-bottom: 1.2em; /* Override BS Inline-code style */
}

.highlight {
  @extend %code-snippet-radius;
  @extend %code-snippet-bg;

  @at-root figure#{&} {
    @extend %code-snippet-bg;
  }

  overflow: auto;
  padding-top: 0.5rem;
  padding-bottom: 1rem;

  pre {
    margin-bottom: 0;
    font-size: $code-font-size;
    line-height: 1.4rem;
    word-wrap: normal; /* Fixed Safari overflow-x */
  }

  table {
    td pre {
      overflow: visible;  /* Fixed iOS safari overflow-x */
      word-break: normal; /* Fixed iOS safari linenos code break */
    }
  }

  .lineno {
    padding-right: 0.5rem;
    min-width: 2.2rem;
    text-align: right;
    color: var(--highlight-lineno-color);
    -webkit-user-select: none;
    -moz-user-select: none;
    -o-user-select: none;
    user-select: none;
  }

  /* set the dollar sign to non-selectable */
  .gp {
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
} /* .highlight */

code {
  -webkit-hyphens: none;
  hyphens: none;

  &.highlighter-rouge {
    font-size: $code-font-size;
    padding: 3px 5px;
    word-break: break-word;
    border-radius: 4px;
    background-color: var(--inline-code-bg);
  }

  &.filepath {
    background-color: inherit;
    color: var(--filepath-text-color);
    font-weight: 600;
    padding: 0;
  }

  a > &.highlighter-rouge {
    padding-bottom: 0; /* show link's underlinke */
    color: inherit;
  }

  a:hover > &.highlighter-rouge {
    border-bottom: none;
  }

  blockquote & {
    color: inherit;
  }

  .highlight > & {
    color: transparent;
  }
}

td.rouge-code {
  @extend %code-snippet-padding;

  /*
    Prevent some browser extends from
    changing the URL string of code block.
  */
  a {
    color: inherit !important;
    border-bottom: none !important;
    pointer-events: none;
  }
}

/* Hide line numbers for default, console, and terminal code snippets */
div {
  &[class^="highlighter-rouge"],
  &.nolineno,
  &.language-plaintext.highlighter-rouge,
  &.language-console.highlighter-rouge,
  &.language-terminal.highlighter-rouge {
    pre.lineno {
      display: none;
    }

    td.rouge-code {
      padding-left: 1.5rem;
    }
  }
}

.code-header {
  @extend %no-cursor;

  $code-header-height: 2.25rem;

  border-top-left-radius: $code-radius;
  border-top-right-radius: $code-radius;
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: $code-header-height;

  &::before {
    $dot-size: 0.75rem;
    $dot-margin: 0.5rem;

    content: "";
    display: inline-block;
    margin-left: 1rem;
    width: $dot-size;
    height: $dot-size;
    border-radius: 50%;
    background-color: var(--code-header-muted-color);
    box-shadow:
      ($dot-size + $dot-margin) 0 0 var(--code-header-muted-color),
      ($dot-size + $dot-margin) * 2 0 0 var(--code-header-muted-color);
  }

  /* the label block */
  span {
    /* label icon */
    i {
      font-size: 1rem;
      margin-right: 0.4rem;
      color: var(--code-header-icon-color);

      &.small {
        font-size: 70%;
      }
    }

    @at-root [file] #{&} > i {
      position: relative;
      top: 1px; /* center the file icon */
    }

    /* label text */
    &::after {
      content: attr(data-label-text);
      font-size: 0.85rem;
      font-weight: 600;
      color: var(--code-header-text-color);
    }
  }

  /* clipboard */
  button {
    @extend %cursor-pointer;

    border: 1px solid transparent;
    border-radius: $code-radius;
    height: $code-header-height;
    width: $code-header-height;
    padding: 0;
    background-color: inherit;

    i {
      color: var(--code-header-icon-color);
    }

    &[timeout] {
      &:hover {
        border-color: var(--clipboard-checked-color);
      }

      i {
        color: var(--clipboard-checked-color);
      }
    }

    &:focus {
      outline: none;
    }

    &:not([timeout]):hover {
      background-color: rgba(128, 128, 128, 0.37);

      i {
        color: white;
      }
    }
  }
}

@media all and (max-width: 576px) {
  .post-content {
    > div[class^="language-"] {
      @include ml-mr(-1.25rem);

      border-radius: 0;

      .highlight {
        padding-left: 0.25rem;
      }

      .code-header {
        border-radius: 0;
        padding-left: 0.4rem;
        padding-right: 0.5rem;
      }
    }
  }
}
